﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using OilWaterSystem.BLL;
using OilWaterSystem.Common;
using OilWaterSystem.Model;

namespace OilWaterSystem.Controllers
{
    public class LoginController : Controller
    {
        /// <summary>
        /// 实例化UserInfo接口的对象
        /// </summary>
        private IBLL.ITb_UserService _userService = new Tb_UserService();

        /// <summary>
        /// 验证码的实现
        /// </summary>
        /// <returns>返回验证码</returns>
        public ActionResult getCheckCode()
        {
            //首先实例化验证码的类
            ValidateCode validateCode = new ValidateCode();
            //生成验证码指定的长度
            string code = validateCode.GetRandomString(4);
            //将验证码赋值给Session变量
            //Session["ValidateCode"] = code;
            this.TempData["ValidateCode"] = code;//TempData是一个字典类，作用是在Action执行过程之间传值
            //简单的说，你可以在执行某个Action的时候，将数据存放在TempData中，那么在下一次Action执行过程中可以使用TempData中的数据
            //参考：http://developer.51cto.com/art/200904/118494.htm
            //创建验证码的图片
            byte[] bytes = validateCode.CreateImage(code);
            //最后将验证码返回
            return File(bytes, @"image/jpeg");
        }

        /// <summary>
        /// 判断用户输入的信息是否正确，[HttpPost]
        /// </summary>
        /// <param name="User_Name">用户名</param>
        /// <param name="user">用户的实体类</param>
        /// <param name="Code">验证码</param>
        /// <returns>返回是否执行成功的标志</returns>
        public ActionResult CheckUserInfo(string User_Name, Tb_User user, string Code)
        {
            //首先我们拿到系统的验证码
            string sessionCode = this.TempData["ValidateCode"] == null
                                     ? ""
                                     : this.TempData["ValidateCode"].ToString();

            //判断用户输入的验证码是否正确
            if (sessionCode.Trim() != Code.Trim())
            {
                return Content("验证码输入不正确");
            }
            //如果用户信息存在的话讲用户信息保存到session中
            //首先根据用户名的信息获取到用户详细的信息
            Tb_User userInfoShow = _userService.LoadEntities(c => c.User_Name == User_Name).FirstOrDefault();
            Session["UserInfo"] = userInfoShow;

            //调用业务逻辑层（BLL）去校验用户是否正确,定义变量存取获取到的用户的错误信息
            string UserInfoError = "";
            var loginUserInfo = _userService.CheckUserInfo(user);
            switch (loginUserInfo)
            {
                case LoginResult.PwdError:
                    UserInfoError = "密码错误！";
                    break;
                case LoginResult.UserNotExist:
                    UserInfoError = "用户名输入错误或者您已经被禁用！";
                    break;
                case LoginResult.NotAdminOK:
                    UserInfoError = "NotAdminOK";
                    break;
                case LoginResult.AdminOK:
                    UserInfoError = "AdminOK";
                    break;
                default:
                    UserInfoError = "未知错误，请您检查您的数据库";
                    break;
            }
            return Content(UserInfoError);
        }


    }
}
